home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 June / PCpro_2005_06.ISO / files / opensource / amc / amc_install.exe / {app} / Scripts / Port.hu.ifs < prev    next >
Encoding:
Text File  |  2005-03-13  |  11.5 KB  |  391 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=Peter Varju (<link>varjupe@freemail.hu</link>)
  8. Title=port.hu
  9. Description=Imports hungarian titles and description from port.hu site
  10. Site=www.port.hu
  11. Language=HU
  12. Version=
  13. Requires=3.5.0
  14. Comments=
  15. License=This program is free software; you can redistribute it and/or modify it under the  terms of the GNU General Public License as published by the Free Software Foundation;  either version 2 of the License, or (at your option) any later version. |
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program IMDb;
  23.  
  24. var
  25.   MovieName: string;
  26.   BeginPos, EndPos: Integer;
  27.  
  28. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  29. var
  30.   i: Integer;
  31. begin
  32.   result := -1;
  33.   if StartAt < 0 then
  34.     StartAt := 0;
  35.   for i := StartAt to List.Count-1 do
  36.     if Pos(Pattern, List.GetString(i)) <> 0 then
  37.     begin
  38.       result := i;
  39.       Break;
  40.     end;
  41. end;
  42.  
  43. procedure AnalyzePage(Address: string);
  44. var
  45.   Page: TStringList;
  46. begin
  47.   Page := TStringList.Create;
  48.   Page.Text := GetPage(Address);
  49.  
  50.   if pos('Nincs ilyen cφm√ film', Page.Text) <> 0 then
  51.      showmessage('Nincs ilyen cφm√ film a PORT adatbßzisban.')
  52.   else begin
  53.     if pos('<center>', Page.Text) <> 0 then begin
  54.       AnalyzeMoviePage(Page);
  55.     end else begin
  56.       PickTreeClear;
  57.       AddMoviesTitles(Page,'/pls/ci/cinema.index_htm');
  58.       if PickTreeExec(Address) then begin
  59.         AnalyzePage(Address);
  60.         end;
  61.     end;
  62.   end;
  63.   Page.Free;
  64. end;
  65.  
  66. procedure AnalyzeMoviePage(Page: TStringList);
  67. var
  68.   Line, Temp, Value, Value2, FullValue, CommentString: string;
  69.   LineNr: Integer;
  70.   BeginPos, EndPos: Integer;
  71. begin
  72.  
  73.   //hungarian title
  74.   LineNr := FindLine('<center>', Page, 0);
  75.   if LineNr > -1 then
  76.   begin
  77.     Line := Page.GetString(LineNr);
  78.     BeginPos := pos('">', Line)+2;
  79.     EndPos := pos('</font>', Line);
  80.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  81.     SetField(fieldTranslatedTitle, Value);
  82.   end;
  83.  
  84.   //original title
  85.   BeginPos := EndPos+1;
  86.   Delete(Line, 1, BeginPos);
  87.   BeginPos := pos('size="2">(', Line)+10;
  88.   EndPos := pos(')', Line);
  89.   Value := copy(Line, BeginPos, EndPos - BeginPos);
  90.   HTMLRemoveTags(Value);
  91.   SetField(fieldOriginalTitle, Value);
  92.  
  93.   //year
  94.   LineNr := FindLine('</strong>', Page, 0);
  95.   if LineNr > -1 then
  96.   begin
  97.     Line := Page.GetString(LineNr);
  98.     BeginPos := pos('</strong>', Line)-4;
  99.     Value := copy(Line, BeginPos, 4);
  100.     Value2 := Copy(Value, 1, 2);
  101.     if (Value2='19') or (Value2='20') or (Value2='21') then
  102.       SetField(fieldYear, Value);
  103.   end;
  104.  
  105.   //category, country
  106.   LineNr := FindLine('<strong>', Page, 0);
  107.   if LineNr > -1 then
  108.   begin
  109.     Line := Page.GetString(LineNr);
  110.     BeginPos := pos('<strong>', Line)+8;
  111.     EndPos := pos('</strong>', Line);
  112.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  113.     Value := stringReverse(Value);
  114.  
  115.     Value2:=Value;
  116.  
  117.     //cutting year
  118.     EndPos := pos(',', Value);
  119.     Delete(Value, EndPos, Length(Value)-1);
  120.     Value := stringReverse(Value);
  121.     Value := Copy(trim(Value), 0, 2);
  122.     if (Value='19') or (Value='20') or (Value='21') then
  123.       Value2:=Copy(Value2, 7, Length(Value2));
  124.  
  125.     //cutting time
  126.     Value := Value2;
  127.     if Copy(Value,0,5)='crep ' then begin
  128.       EndPos := pos(',', Value);
  129.       Delete(Value, 1, EndPos);
  130.     end;
  131.     Value := stringReverse(Value);
  132.  
  133.     //cutting colors
  134.     if pos('szφnes, fekete-fehΘr ',Value)=1 then begin
  135.       Delete(Value, 1, 21);
  136.     end else
  137.       if (pos('fekete-fehΘr ',Value)=1) or (pos('szφnes ',Value)=1) then begin
  138.         EndPos := pos(' ', Value);
  139.         Delete(Value, 1, EndPos);
  140.       end;
  141.  
  142.     //cutting language type
  143.     if (pos('magyarul beszΘl⌡ ',Value)=1) then begin
  144.       Delete(Value, 1, 17);
  145.     end;
  146.     if (pos('hangalßmondßsos ',Value)=1) then begin
  147.       Delete(Value, 1, 16);
  148.     end;
  149.     if (pos('feliratos ',Value)=1) then begin
  150.       Delete(Value, 1, 10);
  151.     end;
  152.     if (pos('nΘmafilm ',Value)=1) then begin
  153.       Delete(Value, 1, 9);
  154.     end;
  155.  
  156.     Value2:=Copy(Value,0,pos(' ',Value)-1);
  157.     Value:=Copy(Value,pos(' ',Value)+1,Length(Value));
  158.  
  159.     SetField(fieldCategory, AnsiUpFirstLetter(Value));
  160.     SetField(fieldCountry, AnsiUpFirstLetter(Value2));
  161.   end;
  162.  
  163.   //actors
  164.   LineNr := FindLine('<b>szerepl⌡(k):', Page, 0);
  165.   if LineNr > -1 then
  166.   begin
  167.     Line := Page.GetString(LineNr);
  168.     BeginPos := pos('<b>szerepl⌡(k): </b><br>', Line)+24;
  169.     Delete(Line, 1, BeginPos-1);
  170.     EndPos := pos('<hr>', Line)-1;
  171.     Value := copy(Line, 0, EndPos);
  172.     Value := StringReplace(Value, '<br>', #13#10);
  173.     HTMLRemoveTags(Value);
  174.     SetField(fieldActors, Value);
  175.   end;
  176.  
  177.   //director
  178.   LineNr := FindLine('<strong>rendez⌡: </strong>', Page, 0);
  179.   if LineNr > -1 then
  180.   begin
  181.     Line := Page.GetString(LineNr);
  182.     BeginPos := pos('<strong>rendez⌡: </strong>', Line)+31;
  183.     Delete(Line, 1, BeginPos-1);
  184.     EndPos := pos('<br>', Line)-1;
  185.     Value := copy(Line, 0, EndPos);
  186.     HTMLRemoveTags(Value);
  187.     SetField(fieldDirector, Value);
  188.   end;
  189.  
  190.   //description
  191.   LineNr := FindLine('<b>szavazok</b></a> rß!', Page, 0);
  192.   if LineNr > -1 then
  193.   begin
  194.     Line := Page.GetString(LineNr);
  195.     BeginPos := pos('<b>szavazok</b></a> rß!', Line)+23;
  196.     Delete(Line, 1, BeginPos-1);
  197.     BeginPos := pos('size="2">', Line)+9;
  198.     Delete(Line, 1, BeginPos-1);
  199.     EndPos := pos('</font>', Line)-1;
  200.     Value := copy(Line, 0, EndPos);
  201.     Value := StringReplace(Value, '<BR>', #13#10);
  202.     HTMLRemoveTags(Value);
  203.     SetField(fieldDescription, Value);
  204.   end;
  205.  
  206.   //producer
  207.   LineNr := FindLine('<strong>producer: </strong>', Page, 0);
  208.   if LineNr > -1 then
  209.   begin
  210.     Line := Page.GetString(LineNr);
  211.     BeginPos := pos('<strong>producer: </strong>', Line)+32;
  212.     Delete(Line, 1, BeginPos-1);
  213.     EndPos := pos('<br>', Line)-1;
  214.     Value := copy(Line, 0, EndPos);
  215.     HTMLRemoveTags(Value);
  216.     SetField(fieldProducer, Value);
  217.   end;
  218.  
  219.   //comments
  220.   CommentString := '';
  221.   //comments - screenwriter
  222.   LineNr := FindLine('<strong>forgat≤k÷nyvφr≤: </strong>', Page, 0);
  223.   if LineNr > -1 then
  224.   begin
  225.     Line := Page.GetString(LineNr);
  226.     BeginPos := pos('<strong>forgat≤k÷nyvφr≤: </strong>', Line)+39;
  227.     Delete(Line, 1, BeginPos-1);
  228.     EndPos := pos('<br>', Line)-1;
  229.     Value := copy(Line, 0, EndPos);
  230.     HTMLRemoveTags(Value);
  231.     if Value<>'' then
  232.       CommentString := CommentString+'Forgat≤k÷nyvφr≤: '+Value+#13#10;
  233.   end;
  234.  
  235.   //comments - writer
  236.   LineNr := FindLine('<strong>φr≤: </strong>', Page, 0);
  237.   if LineNr > -1 then
  238.   begin
  239.     Line := Page.GetString(LineNr);
  240.     BeginPos := pos('<strong>φr≤: </strong>', Line)+27;
  241.     Delete(Line, 1, BeginPos-1);
  242.     EndPos := pos('<br>', Line)-1;
  243.     Value := copy(Line, 0, EndPos);
  244.     HTMLRemoveTags(Value);
  245.     if Value<>'' then
  246.       CommentString := CommentString+'═r≤: '+Value+#13#10;
  247.   end;
  248.  
  249.   //comments - music
  250.   LineNr := FindLine('<strong>zene: </strong>', Page, 0);
  251.   if LineNr > -1 then
  252.   begin
  253.     Line := Page.GetString(LineNr);
  254.     BeginPos := pos('<strong>zene: </strong>', Line)+28;
  255.     Delete(Line, 1, BeginPos-1);
  256.     EndPos := pos('<br>', Line)-1;
  257.     Value := copy(Line, 0, EndPos);
  258.     HTMLRemoveTags(Value);
  259.     if Value<>'' then
  260.       CommentString := CommentString+'Zene: '+Value+#13#10;
  261.   end;
  262.  
  263.   //comments - cameraman
  264.   LineNr := FindLine('<strong>operat⌡r: </strong>', Page, 0);
  265.   if LineNr > -1 then
  266.   begin
  267.     Line := Page.GetString(LineNr);
  268.     BeginPos := pos('<strong>operat⌡r: </strong>', Line)+32;
  269.     Delete(Line, 1, BeginPos-1);
  270.     EndPos := pos('<br>', Line)-1;
  271.     Value := copy(Line, 0, EndPos);
  272.     HTMLRemoveTags(Value);
  273.     if Value<>'' then
  274.       CommentString := CommentString+'Operat⌡r: '+Value+#13#10;
  275.   end;
  276.  
  277.   //comments - costum designer
  278.   LineNr := FindLine('<strong>jelmeztervez⌡: </strong>', Page, 0);
  279.   if LineNr > -1 then
  280.   begin
  281.     Line := Page.GetString(LineNr);
  282.     BeginPos := pos('<strong>jelmeztervez⌡: </strong>', Line)+37;
  283.     Delete(Line, 1, BeginPos-1);
  284.     EndPos := pos('<br>', Line)-1;
  285.     Value := copy(Line, 0, EndPos);
  286.     HTMLRemoveTags(Value);
  287.     if Value<>'' then
  288.       CommentString := CommentString+'Jelmeztervez⌡: '+Value+#13#10;
  289.   end;
  290.  
  291.   //comments - cutter
  292.   LineNr := FindLine('<strong>vßg≤: </strong>', Page, 0);
  293.   if LineNr > -1 then
  294.   begin
  295.     Line := Page.GetString(LineNr);
  296.     BeginPos := pos('<strong>vßg≤: </strong>', Line)+28;
  297.     Delete(Line, 1, BeginPos-1);
  298.     EndPos := pos('<br>', Line)-1;
  299.     Value := copy(Line, 0, EndPos);
  300.     HTMLRemoveTags(Value);
  301.     if Value<>'' then
  302.       CommentString := CommentString+'Vßg≤: '+Value+#13#10;
  303.   end;
  304.  
  305.   SetField(fieldComments, CommentString);
  306.  
  307.   //picture
  308.   LineNr := FindLine('<img src="/mozi/kep_film', Page, 0);
  309.   if LineNr > -1 then
  310.   begin
  311.     Line := Page.GetString(LineNr);
  312.     BeginPos := pos('<img src="', Line) + 10;
  313.     Delete(Line, 1, BeginPos-1);
  314.     EndPos := pos('"', Line);
  315.     Value := copy(Line, 1, EndPos - 1);
  316.     GetPicture(Value); // False = do not store picture externally ; store it in the catalog file
  317.   end;
  318.  
  319.   //DisplayResults;
  320. end;
  321.  
  322. Function stringReverse(S : String): String;
  323. Var
  324.    i : Integer;
  325. Begin
  326.    Result := '';
  327.    For i := Length(S) DownTo 1 Do
  328.    Begin
  329.      Result := Result + Copy(S,i,1) ;
  330.    End;
  331. End;
  332.  
  333. procedure AddMoviesTitles(Page: TStringList; Tag: string);
  334. var
  335.   Line: string;
  336.   LineNr: Integer;
  337.   MovieTitle, OriTitle, MovieAddress, Year: string;
  338.   StartPos, EndPos: Integer;
  339. begin
  340.   LineNr := FindLine(tag, Page, 0);
  341.   if LineNr > -1 then
  342.   begin
  343.     PickTreeAdd('Talßlatok:', '');
  344.     Line := Page.GetString(LineNr);
  345.     repeat
  346.       StartPos := pos('href="', Line) + 5;
  347.       Delete(Line, 1, StartPos);
  348.       MovieAddress := Copy(Line, 1, pos('" target="', Line) - 1);
  349.       StartPos := pos('i_body=', MovieAddress) + 7;
  350.       EndPos := pos('&i_title=', MovieAddress);
  351.       MovieAddress:=Copy(Line, StartPos, EndPos-StartPos);
  352.       MovieAddress:=StringReplace(MovieAddress, '@@@', '&');
  353.       MovieAddress:=StringReplace(MovieAddress, '@@', '?');
  354.  
  355.       StartPos := Pos('<strong>', Line) + 8;
  356.       MovieTitle := Copy(Line, StartPos, Pos('</strong>', Line) - StartPos);
  357.       StartPos := Pos('</a>', Line) + 6;
  358.       OriTitle := Copy(Line, StartPos, Pos(')</font>', Line) - StartPos);
  359.       StartPos := Pos(') </font>', Line) - 4;
  360.       Year := Copy(Line, StartPos, 4);
  361.       if (Copy(Year,0,2)='19') or (Copy(Year,0,2)='20') or (Copy(Year,0,2)='21') then
  362.         Year := Copy(Line, StartPos, 4)
  363.       else
  364.         Year := '';
  365.     MovieTitle:=MovieTitle+' ('+OriTitle+'), '+Year;
  366.       HTMLDecode(Movietitle);
  367.       PickTreeAdd(MovieTitle, 'http://www.port.hu' + MovieAddress);
  368.         LineNr := FindLine(tag, Page, LineNr+1);
  369.         if LineNr > -1 then
  370.         Line := Page.GetString(LineNr)
  371.         else
  372.         Line := '';
  373.     until Line = '';
  374.   end;
  375. end;
  376.  
  377. begin
  378.   if CheckVersion(3,5,0) then
  379.   begin
  380.     MovieName := GetField(fieldOriginalTitle);
  381.     if MovieName = '' then
  382.       MovieName := GetField(fieldTranslatedTitle);
  383.     if Input('Port.hu import', 'A keresend⌡ film cφme:', MovieName) then
  384.     begin
  385.       AnalyzePage('http://www.port.hu/pls/ci/cinema.film_list?i_film_title='+UrlEncode(MovieName));
  386.     end;
  387.   end else
  388.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  389. end.
  390.  
  391.